package cn.gok.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * @author: DxlinY
 * @apiNote: 时间相关工具包
 * 单例模式
 * @date: 2020/9/11
 * @time: 17:05
 */
final public class DateUtil {

    /**
     * 静态时间格式化工具
     */
    private static final SimpleDateFormat FORMATER = new SimpleDateFormat();

    private DateUtil() {

    }

    /**
     * 返回当前时间
     *
     * @return ex: 2020-09-11 15:30:55
     */
    public static String nowDateTime() {
        FORMATER.applyPattern("yyyy-MM-dd hh:mm:ss");
        return FORMATER.format(System.currentTimeMillis());
    }

    /**
     * 返回当前日期时间字符串格式
     *
     * @return ex:2020-09-11
     */
    public static String nowDate() {
        FORMATER.applyPattern("yyyy-MM-dd");
        return FORMATER.format(System.currentTimeMillis());
    }

    /**
     * 返回当前时间字符串格式24小时制
     *
     * @return ex:15:19:00
     */
    public static String nowTime() {
        FORMATER.applyPattern("HH:mm:ss");
        return FORMATER.format(System.currentTimeMillis());
    }

    /**
     * 返回自定格式的时间字符串
     *
     * @param pattern 自定义格式
     * @param date    自定义时间
     * @return String
     */
    public static String byPatternToStr(String pattern, long date) {
        try {
            FORMATER.applyPattern(pattern);
            return FORMATER.format(date);
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("pattern error");
        }
    }

    /**
     * 通过自定义格式返回时间整型
     *
     * @param pattern 自定义格式
     * @param dateStr 自定义格式的时间字符串
     * @return long
     */
    public static long byPatternToLong(String pattern, String dateStr) {
        try {
            FORMATER.applyPattern(pattern);
            return FORMATER.parse(dateStr).getTime();
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("pattern error");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 根据str返回当前时间字符串
     * @param pattern 自定义格式
     * @return string
     */
    public static String byPatternNowToStr(String pattern) {
        try {
            FORMATER.applyPattern(pattern);
            return FORMATER.format(System.currentTimeMillis());
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("pattern error");
        }
    }
}
